package net.realsee.domain.wcs.rcs.hik.v4;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.List;

/**
 * 执行步骤集合。每个执行步骤完成后，都需要业务系统通过任务继续执行接口，来驱动下一个阶段的执行。
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class HikTaskTargetRoute {

    /**
     * 目标路径序列。从0开始。
     */
    private Integer seq;

    /**
     * 目标类型。可扩展枚举值。
     * 预制枚举值：
     * ZONE
     * 目标所处区域编号
     * SITE
     * 站点别名
     * STORAGE
     * 仓位别名
     * MAT_LABEL
     * 物料标签
     * CARRIER
     * 载具编号
     * STACK
     * 巷道编号
     * STACK_LABEL
     * 巷道特征值
     * EQPT
     * 外部设备
     * PTL_WALL
     * 分播墙
     * CARRIER_TYPE
     * 载具类型
     * BIN_TYPE
     * 仓位类型
     * AREA_STATION
     * 区域工作台
     * CARRIER_HEAT
     * 载具冷热度
     * PILE_LAYER
     * 堆叠层号
     * PILE_COUNT
     * 一次搬几个
     * MIX_CONDITION
     * 条件组合
     */
    private String type;

    /**
     * 与type对应的目标编号
     * 枚举为ZONE时：支持多个区域，以逗号隔开，例如： ZONE1,ZONE2
     * 枚举为STRATEGY_GROUP时，格式如下：
     * [{"type":"ZONE","code":"SF2"},{"type":" CARRIER_TYPE","code":"P1"}]
     */
    private String code;

    /**
     * 该步骤是否自动开始。固定枚举值。
     * 预制枚举值：
     * 0
     * 否
     * 1
     * 是
     * 都传1即可
     */
    private Integer autoStart;

    /**
     * 机器人到达目标位置后的操作。可扩展的枚举值。
     * 预制枚举值：
     * COLLECT
     * 取货
     * DELIVERY
     * 送货
     * ROTATE
     * 旋转
     */
    private String operation;

    /**
     * 要求调度系统仅在当前指定的范围内选择机器人执行该步骤。
     * 可能出现任务步骤与机器人类型不匹配的异常，需要业务系统确保任务与机器人类型的匹配。
     * 如果指定当前步骤的机器人选择范围，则调度系统无视任务中设定的机器人选择范围；
     * 如果任务中也没有指定机器人选择范围，则调度系统会在所有可用机器人的范围内寻找最优方案。
     * 固定枚举值：
     * GROUPS
     * 机器人资源组编号
     * ROBOTS
     * 机器人编号
     */
    private String robotType;

    /**
     * 与robotType匹配的资源类型唯一标识。
     */
    private List<String> robotCode;

    private HikTaskExtra extra;

}
